package pers.xiqingbo.pojo;

import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @PackageName: pers.xiqingbo.pojo
 * @ClassName: Cart
 * @Description: 购物车对象
 * @Author: Schieber
 * @Date: 2021/2/28 下午 22:05
 */
public class Cart {
    /**
     * 购物车添加的商品对象
     */
    private Map<Integer, CartGoods> cartGoods = new LinkedHashMap<>();


    /**
     * 添加商品方法
     *
     * @param goods 添加的商品对象
     */
    public void addGoods(CartGoods goods) {
        // 通过新添加商品的id查询购物车内是否存在该商品
        CartGoods commodity = cartGoods.get(goods.getId());

        // 如果购物车内该商品为空，则直接添加该商品
        if (commodity == null) {
            cartGoods.put(goods.getId(), goods);
        } else {
            // 将购物车内已存在的该商品数量+1
            commodity.setCount(commodity.getCount() + 1);
            // 将购物车内已存在的该商品总价格设置为（价格 * 数量）
            commodity.setTotalPrice(commodity.getPrice().multiply(BigDecimal.valueOf(commodity.getCount())));
        }
    }

    /**
     * 删除商品方法
     *
     * @param id 需要删除商品的id
     */
    public void deleteGoods(Integer id) {
        cartGoods.remove(id);
    }

    /**
     * 修改商品数量的方法
     *
     * @param id    需要修改商品的id
     * @param count 需要修改商品的数量
     */
    public void updateGoods(Integer id, Integer count) {
        // 通过传入的id获取需要修改数量的商品
        CartGoods commodity = cartGoods.get(id);
        if (commodity != null) {
            commodity.setCount(count);
            // 将修改后的商品总价格设置为（价格 * 数量）
            commodity.setTotalPrice(commodity.getPrice().multiply(BigDecimal.valueOf(commodity.getCount())));
        }
    }

    /**
     * 清除购物车方法
     */
    public void clearCart() {
        cartGoods.clear();
    }

    public Cart() {
    }

    public Cart(Map<Integer, CartGoods> cartGoods) {
        this.cartGoods = cartGoods;
    }

    public Integer getTotalCount() {
        // 购物车商品总数量
        Integer totalCount = 0;
        // 遍历购物车内的商品获取到每个商品数量并相加得到商品总数量
        for (Map.Entry<Integer, CartGoods> cartGoodsEntry : cartGoods.entrySet()) {
            totalCount += cartGoodsEntry.getValue().getCount();
        }
        return totalCount;
    }

    public BigDecimal getTotalPrice() {
        // 购物车商品总价格
        BigDecimal totalPrice = new BigDecimal(0);
        // 遍历购物车内的商品获取到每个商品总价格并相加得到购物车商品总价格
        for (Map.Entry<Integer, CartGoods> cartGoodsEntry : cartGoods.entrySet()) {
            totalPrice = totalPrice.add(cartGoodsEntry.getValue().getTotalPrice());
        }
        return totalPrice;
    }

    public Map<Integer, CartGoods> getCartGoods() {
        return cartGoods;
    }

    public void setCartGoods(Map<Integer, CartGoods> cartGoods) {
        this.cartGoods = cartGoods;
    }

    @Override
    public String toString() {
        return "Cart{" +
                "totalCount=" + getTotalCount() +
                ", totalPrice=" + getTotalPrice() +
                ", cartGoods=" + cartGoods +
                '}';
    }
}
